package controller

import (
	"CampusCloudAid/logic"
	"CampusCloudAid/models"
	"CampusCloudAid/pkg/jwt"

	"github.com/gin-gonic/gin"
	"github.com/go-playground/validator/v10"
	"go.uber.org/zap"
)

// FindMoney 查找个人金额
// @Summary 查找个人金额
// @Description 通过用户的 JWT Token 查找个人金额信息
// @Tags Money
// @Accept json
// @Produce json
// @Security ApiKeyAuth
// @Param Authorization header string true "Bearer token"
// @Success 200 {object} ResponseData
// @Router /api/v1/findMoney [get]
func FindMoney(ctx *gin.Context) {
	//通过token获取参数
	var id int64
	var err error
	if id, err = jwt.GetUserId(ctx); err != nil {
		zap.L().Error("token 获取失败", zap.Error(err))
		errs, ok := err.(validator.ValidationErrors)
		if !ok {
			ResponseError(ctx, CodeServerBusy)
			return
		}
		ResponseErrorWithMsg(ctx, CodeInvalidParams, removeTopStruct(errs.Translate(trans)))
	}
	if a, err := logic.FindMoney(id); err != nil {
		ResponseError(ctx, CodeInvalidToken)
		return
	} else {
		total := a.WithDrawable + a.Frozen
		ctx.JSON(200, gin.H{
			"code":  CodeSuccess,
			"msg":   msgFlags[CodeSuccess],
			"total": total,
			"data":  a,
		})
		return
	}
}

// Recharge 充值 没有完全成功
//func Recharge(ctx *gin.Context) {
//	var id int64
//	var err error
//	if id, err = jwt.GetUserId(ctx); err != nil {
//		zap.L().Error("token 获取失败", zap.Error(err))
//		errs, ok := err.(validator.ValidationErrors)
//		if !ok {
//			ResponseError(ctx, CodeServerBusy)
//			return
//		} else {
//			ResponseErrorWithMsg(ctx, CodeInvalidParams, removeTopStruct(errs.Translate(trans)))
//		}
//	}
//	//获取充值金额
//	recharge := new(models.Recharge)
//	if err = ctx.ShouldBindJSON(recharge); err != nil {
//		fmt.Println(err)
//		ResponseError(ctx, CodeInvalidParams)
//		return
//	}
//	//考虑需不需要，对token生成的uid进行判断，如果token为错则生成的就是错误的uid
//	//直接查询钱包表即可，反正后来还要对钱包表中的数据进行更改，查出的数据需要保存
//	var a *models.AccountBalance
//	if a, err = logic.FindMoney(id); err != nil {
//		ResponseError(ctx, CodeInvalidToken)
//	}
//	recharge.UserId = a.UserId
//	if err := logic.Recharge(recharge); err != nil {
//		return
//	}
//	//调用支付宝接口
//	url := alipay.Pay(recharge.Amount)
//	ctx.Redirect(http.StatusTemporaryRedirect, url.String())
//
//	//将更新的金额写入数据库表中
//	ctx.JSON(200, gin.H{
//		"充值成功": true,
//	})
//}

// GiftCard 礼品卡绑定
// @Summary 礼品卡绑定
// @Description 绑定用户的礼品卡
// @Tags GiftCard
// @Accept json
// @Produce json
// @Security ApiKeyAuth
// @Param Authorization header string true "Bearer token"
// @Param card body models.GiftCard true "Gift card information"
// @Success 200 {object} ResponseData
// @Router /api/v1/GiftCard [get]
func GiftCard(ctx *gin.Context) {
	var id int64
	var err error
	if id, err = jwt.GetUserId(ctx); err != nil {
		zap.L().Error("token 获取失败", zap.Error(err))
		errs, ok := err.(validator.ValidationErrors)
		if !ok {
			ResponseError(ctx, CodeServerBusy)
		} else {
			ResponseErrorWithMsg(ctx, CodeInvalidParams, removeTopStruct(errs.Translate(trans)))
		}
	}
	//从前端获取卡号
	card := new(models.GiftCard)
	card.UserId = id
	//绑定参数卡号
	if err = ctx.ShouldBindJSON(card); err != nil {
		ResponseError(ctx, CodeInvalidParams)
		return
	}
	if err = logic.GiftCard(card); err != nil {
		ctx.JSON(200, gin.H{
			"err": err.Error(),
		})
		return
	}
	ResponseSuccess(ctx, true)
}
